/*
 * ClientThread.cpp
 *
 *  Created on: 11.05.2010
 *      Author: stg7
 */
// Thread-Mutterklasse
#include "Thread.cpp"
// Socketkrams
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>


class ClientThread : public Thread{
private:
	int socketID;
protected:
	virtual void run(){
		// behandlung des Clienten

		// kurzes Hallo sagen
		char data[] = "Welcome @ stg7 Server \n";
		if (send(socketID, data, sizeof(data), 0) == -1) {
			std::cout<<"send() failed"<<std::endl;
			return ;
		}

		// sobald der Client beendet wird -> recv =0
		// wird eine leerzeile gesendet : dann wird enter empfangen ( da telnet
		// immer ein enter senden muss, ist die nachrichtenlänge mind 2 )

		char buf[4096]; /// buffer größe festlegen
		int bytes;

		do{
			bytes=recv(socketID, buf, sizeof(buf) - 1, 0);
			buf[bytes] = '\0';
			
			char data[] = "B_\n\n";
			if (send(socketID, data, sizeof(data), 0) == -1) {
				std::cout<<"send() failed"<<std::endl;
				return ;
			}
			bytes=recv(socketID, buf, sizeof(buf) - 1, 0);
			buf[bytes] = '\0';
			
			char data2[] = "C_ABCDEGGGGGGGG\n\n";
			if (send(socketID, data2, sizeof(data2), 0) == -1) {
				std::cout<<"send() failed"<<std::endl;
				return ;
			}
			bytes=recv(socketID, buf, sizeof(buf) - 1, 0);
			buf[bytes] = '\0';
			char data3[] = "C_\n###########################\n\n";
			if (send(socketID, data3, sizeof(data3), 0) == -1) {
				std::cout<<"send() failed"<<std::endl;
				return ;
			}

			std::cout<<"Client send: bytes: "<<bytes << " content: " <<buf;
		}while(bytes>2);

		close(socketID);
		stop();
	}
public:
	ClientThread(int socketID){
		this->socketID=socketID;
	}
};
